package threadpool.executors;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class T06_04_ScheduleThreadPool {
    public static void main(String[] args) {
        //延时执行队列，适合做定时任务
        //内部使用DelayedWorkQueue的等待队列实现
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(4);

        //以下两个定时方法的源码实现： 在run方法里如果有必要的话，会再次将任务重新扔入队列，以便达到定时调用的效果

        //固定的频率来执行某项计划，它不受计划执行时间的影响。到时间，它就执行。

        executorService.scheduleAtFixedRate(() -> {
            System.out.println(System.currentTimeMillis());

        }, 0, 3, TimeUnit.SECONDS);

        //无论某个任务执行多长时间，等执行完了，我再延迟指定的时间。也就是第二个方法，它受计划执行时间的影响。
        executorService.scheduleWithFixedDelay(() -> {
            System.out.println("one more time ~~");

        }, 0, 3, TimeUnit.SECONDS);

        while (true) {

        }
    }
}
